package config

import (
	"bufio"
	"encoding/json"
	"ubt-rbac-service/internal/core/logger"
	"os"
)

var GlobalConfig *Config

// Config 配置文件属性定义
type Config struct {
	AppPort    string          `json:"app_port"`
	DbConfig   *DatabaseConfig `json:"db_config"`
	RdsConfig  *RedisConfig    `json:"rds_config"`
	LogConfig  *LoggerConfig   `json:"log_config"`
	FileConfig *UpFileConfig   `json:"file_config"`
}

// DatabaseConfig 数据库属性定义
type DatabaseConfig struct {
	Usname string `json:"usname"`
	Passwd string `json:"passwd"`
	DbHost string `json:"db_host"`
	DbPort string `json:"db_port"`
	DbName string `json:"db_name"`
}

// RedisConfig Redis属性定义
type RedisConfig struct {
	IpPort string `json:"ip_port"`
	Passwd string `json:"passwd"`
}

// LoggerConfig Redis属性定义
type LoggerConfig struct {
	BasePath string `json:"base_path"`
}

// UpFileConfig Redis属性定义
type UpFileConfig struct {
	BasePath string `json:"base_path"`
	BaseUrl  string `json:"base_url"`
}

// cfg 全局变量
var cfg *Config = nil

// ReadConfig 读取配置文件内容
func ReadConfig(confPath string) *Config {
	file, err := os.Open(confPath)
	if err == nil {
		reader := bufio.NewReader(file)
		decoder := json.NewDecoder(reader)
		if err = decoder.Decode(&cfg); err == nil {
			return cfg
		}
	}
	// 关闭配置文件
	defer func(file *os.File) {
		if err = file.Close(); err != nil {
			logger.Error("关闭配置文件失败。" + err.Error())
		}
	}(file)
	return nil
}

// GetConfig 获取配置内容
func GetConfig() *Config {
	return cfg
}

// SetConfig 将main包中读取的配置参数赋给全局变量
func SetConfig(globalConfig *Config) {
	GlobalConfig = globalConfig
}
